Το έχουμε πει τόσες φορές ως τώρα, ότι "
Ο SQL Server ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ ΚΟΛΠΑ για να υποστηρίξει ελληνικά!". Αν αντιμετωπίζει κανείς πρόβλημα είναι επειδή "κάρφωσε" κάπου κάποιο codepage ή χρησιμοποιεί varchar πεδία αντί για nvarchar.
Ή το αρχείο δεν είναι unicode ή η βάση χρησιμοποιεί varchar αντί για nvarchar. Το "κάρφωμα" του UTF8 στον constructor του StreamReader δεν πρόκειται να βοηθήσει αν το αρχείο δεν είναι UTF8 ήδη. Απλά θα δώσει λάθος αποτελέσματα κατά την ανάγνωση του αρχείου. Το encoding στον constructor δηλώνει το codepage του αρχείου, όχι σε τί θα μετατραπεί αυτό το codepage μετά την ανάγνωση. Τα strings στο .ΝΕΤ είναι πάντα Unicode.
Τα κινέζικα εμφανίζονται όταν προσπαθείς να εμφανίσεις χαρακτήρα ενός codepage χρησιμοποιώντας λάθος codepage. Αυτό μπορεί να συμβεί αν π.χ. προσπαθήσεις να διαβάσεις αρχείου που φτιάχτηκε σε ελληνικό μηχάνημα από μηχάνημα το οποίο έχει αγγλικό locale. Επίσης μπορεί να συμβεί αν αποθηκεύσεις σε varchar πεδίο με αγγλικό collation ελληνικά δεδομένα.
Αν φροντίσεις το αρχείο σου να είναι Unicode και τα πεδία στη βάση nvarchar δεν θα έχεις πρόβλημα.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos